From: Giovanni Campagna Date: Mon, 10 Sep 2012 22:44:28 +0000 (+0200) Subject: MessageTray: fix reentrancy when calling out to the grab helper X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5456 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=809544800b9da8cd295837346b246484f0b8c5cc;p=gnome-shell.git MessageTray: fix reentrancy when calling out to the grab helper Similar to 683546. I'm not sure where this bug lives, but let's make the code robust. https://bugzilla.gnome.org/show_bug.cgi?id=683986 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 6a2e43005..f1687d0f5 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -2310,6 +2310,18 @@ const MessageTray = new Lang.Class({ }, _hideNotification: function() { + // HACK! + // There seems to be a reentrancy issue in calling .ungrab() here, + // which causes _updateState to be called before _notificationState + // becomes HIDING. That hides the notification again, nullifying the + // object but not setting _notificationState (and that's the weird part) + // As then _notificationState is stuck into SHOWN but _notification + // is null, every new _updateState fails and the message tray is + // lost forever. + // + // See more at https://bugzilla.gnome.org/show_bug.cgi?id=683986 + this._notificationState = State.HIDING; + this._grabHelper.ungrab({ actor: this._notification.actor }); if (this._idleMonitorBecameActiveId) {